package com.neu.service;


import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.neu.common.JwtTokenUtils;
import com.neu.dao.AdminDao;
import com.neu.entity.Admin;
import com.neu.entity.Hire;
import com.neu.entity.Params;
import com.neu.exception.CustomException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class AdminService {

    @Autowired
    private AdminDao adminDao;

    public List<Admin> getAll() {
        return adminDao.selectAll();
    }


    public PageInfo<Admin> findBySearch(Params params) {
        PageHelper.startPage(params.getPageNum(),params.getPageSize());
        //接下来的查询会自动按照当前开启的分页设置来查询
        List<Admin> list = adminDao.findBySearch(params);
        return PageInfo.of(list);
    }

    public void add(Admin admin) {
        //1.用户名一定要有，否则不让新增（后面需要用户名登录）
        if(admin.getName() == null || "".equals(admin.getName())){
            throw new CustomException("The username cannot be empty!");
        }
        //2.进行重复性判断，同一名字的管理员不允许重复新增：只要根据用户名去数据库查询一下就可以了
        Admin user = adminDao.findByName(admin.getName());
        if(user != null){
            //说明已经有了，这里我们就要提示前台不允许新增了
            throw new CustomException("The username already exists, please change the username!");
        }
        //初始化一个密码
        if(admin.getPassword() == null){
            admin.setPassword("123456");
        }
        admin.setRole("ROLE_STUDENT");
        adminDao.insertSelective(admin);
    }

    public void update(Admin admin) {
        adminDao.updateByPrimaryKey(admin);
    }


    public void delete(Integer id) {
        adminDao.deleteByPrimaryKey(id);
    }

    public Admin login(Admin admin) {
        //1.进行一些非空判断
        if(admin.getName() == null || "".equals(admin.getName())){
            throw new CustomException("用户名不能为空!");
        }
        if(admin.getPassword() == null || "".equals(admin.getPassword())){
            throw new CustomException("密码不能为空!");
        }
        //2.从数据库里面根据这个用户名和密码去查询对应的管理员信息，

        //如果查出来没有，那说明输入的用户名或者密码有误，提示用户不允许登录
        Admin user = adminDao.findByNameAndPassword(admin.getName(),admin.getPassword());
        if(user == null){
            //如果查出来没有，那说明输入的用户名或者密码有误，提示用户不允许登录
            throw new CustomException("用户名或密码输入不正确");
        }
        // 如果查出来了有，那说明确实有这个管理员，而且输入的用户名和密码都对
        //生成该登录用户对应的token,然后跟着user一起返回到前端
        String token = JwtTokenUtils.getToken(user.getId().toString(),user.getPassword());
        user.setToken(token);
        return user;
    }

    public Admin findById(Integer id) {
        return adminDao.selectByPrimaryKey(id);
    }

    public PageInfo<Admin> findBySearchTutor(Params params) {
        PageHelper.startPage(params.getPageNum(),params.getPageSize());
        //接下来的查询会自动按照当前开启的分页设置来查询
        List<Admin> list = adminDao.findBySearchTutor(params);
        return PageInfo.of(list);
    }

    public void updateTutor(Admin admin) {

        adminDao.updateTutor(admin);
    }


    public void updatePassword(Admin admin) {
        //1.进行一些非空判断
        if(admin.getName() == null || "".equals(admin.getName())){
            throw new CustomException("用户名不能为空!");
        }
        if(admin.getPassword() == null || "".equals(admin.getPassword())){
            throw new CustomException("密码不能为空!");
        }
        String phone = adminDao.getPhoneByName(admin);
        String email = adminDao.getEmailByName(admin);
        if((!admin.getPhone().equals(phone)) && (!admin.getEmail().equals(email))){
            throw new CustomException("电话号码和电子邮件号码不匹配，无法重置密码!");
        }
        adminDao.updatePassword(admin);
    }

    public List<Admin> findAll() {
        return adminDao.findAll();
    }

    public void evaluateTutor(Admin admin) {

            adminDao.insertTutorContent(admin);


    }

    public Admin getTutorInformation(Integer id) {
        Admin tutor = adminDao.getTutorInformation(id);
        String[] split = tutor.getPrice().split(" ");
        String price = split[0];
        tutor.setPrice(price);
        return tutor;
    }

}
